<?php

namespace app\admin\controller;

use app\BaseApiController;
use app\admin\model\User as UserModel;

class Auth extends BaseApiController
{
    /**
     * 用户登录
     */
    public function login()
    {
        try {
            // 参数验证
            $params = $this->getParams([
                'username' => 'require|max:64',
                'password' => 'require|max:255',
            ], [
                'username.require' => '用户名不能为空',
                'username.max' => '用户名长度不能超过64个字符',
                'password.require' => '密码不能为空',
                'password.max' => '密码长度不能超过255个字符',
            ]);

            // 查找用户
            $user = UserModel::where('username', $params['username'])
                ->where('is_disabled', 0)
                ->find();

            if (!$user) {
                return $this->error('用户名或密码错误', 401);
            }

            // 验证密码
            if (md5($params['password']) !== $user->password) {
                return $this->error('用户名或密码错误', 401);
            }

            // 生成token（简单方式：用户名+时间戳的MD5）
            $token = md5($user->username . time() . rand(1000, 9999));
            
            // 更新用户最后登录时间
            $user->save(['update_time' => date('Y-m-d H:i:s')]);

            return $this->success([
                'token' => $token,
                'user' => [
                    'id' => $user->id,
                    'username' => $user->username,
                    'is_disabled' => $user->is_disabled,
                    'create_time' => $user->create_time,
                ]
            ], '登录成功');

        } catch (\think\exception\ValidateException $e) {
            // 参数验证错误
            return $this->error($e->getError(), 422);
        } catch (\Exception $e) {
            // 其他异常
            return $this->error('登录失败，请稍后重试', 500);
        }
    }

    /**
     * 用户登出
     */
    public function logout()
    {
        try {
            // 简单处理，实际应该清除token
            return $this->success(null, '登出成功');
        } catch (\Exception $e) {
            return $this->error('登出失败，请稍后重试', 500);
        }
    }

    /**
     * 获取当前用户信息
     */
    public function userInfo()
    {
        try {
            $user = $this->request->user ?? null;
            
            if (!$user) {
                return $this->error('未登录或登录已过期', 401);
            }

            return $this->success($user, '获取用户信息成功');
        } catch (\Exception $e) {
            return $this->error('获取用户信息失败，请稍后重试', 500);
        }
    }
}
